from typing import Protocol

from poker_bot.core.models.dto.deposit import DepositDTO, DepositWithDetailsDTO
from poker_bot.domain.deposit import DepositEntity


class DepositReader(Protocol):
    async def get_deposit_by_id(self, deposit_id: int) -> DepositWithDetailsDTO | None:
        raise NotImplementedError

    async def get_all_deposits(self) -> list[DepositWithDetailsDTO]:
        raise NotImplementedError

    async def get_user_deposits(self, user_tg_id: int) -> list[DepositDTO]:
        raise NotImplementedError

    async def get_deposits_for_confirmation(self) -> list[DepositWithDetailsDTO]:
        raise NotImplementedError


class DepositRepo(Protocol):
    async def acquire_deposit_by_id(self, deposit_id: int) -> DepositEntity | None:
        raise NotImplementedError

    async def create_deposit(self, deposit: DepositEntity) -> DepositEntity:
        raise NotImplementedError

    async def update_deposit(self, deposit: DepositEntity) -> None:
        raise NotImplementedError
